package com.skycong.hello77.activity.webview;

import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

/**
 * 有加载条的webview
 * Created by Kiki on 2018/4/28.
 */

public class ProgressWebView extends WebView {
    private ProgressBar progressbar;


    public ProgressWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
        progressbar = new ProgressBar(context,null,android.R.attr.progressBarStyleHorizontal);
        progressbar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,4,0,0));
        addView(progressbar);
        setWebChromeClient(new WebChromeClient());

    }
   /**
    * 设置websrttings
    * */
    public void setDefaultWebSettings(WebSettings webSettings){
        if(webSettings == null) return;
        webSettings.setJavaScriptEnabled(true);//设置与js交互
        webSettings.setUseWideViewPort(true);//设置此属性，可任意比例缩放,将图片调整到适合webview的大小
       // webSettings.setSupportZoom(true);//支持缩放
       // webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//支持内容重新布局
        //webSettings.supportMultipleWindows();//多窗口
       // webSettings.setCacheMode(webSettings.LOAD_CACHE_ELSE_NETWORK);//关闭缓存
       // webSettings.setAllowFileAccess(true);//设置可访问文件
        //webSettings.setNeedInitialFocus(true);//当webview调用requestFocus时为webview设置节点
       // webSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持通过js打开新窗口
       // webSettings.setLoadWithOverviewMode(true);//缩放至屏幕的大小,自适应屏幕大小
       // webSettings.setLoadsImagesAutomatically(true);//支持图片自动加载
        webSettings.setBlockNetworkImage(false);//解决图片不显示
       // webSettings.setDomStorageEnabled(true);//设置适应Html5的一些方法

        /*
        * 上面的 settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING);
        * 之所以要使用 try…catch… 包裹住，主要原因是有部分设备即便满足了 SDK 的 API 大于 19，
        * 仍然不支持该配置，会报下面的异常：
        * WebViewClassic does not support TEXT_AUTOSIZING layout mode
        *
        * */
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){//如果sdk版本大于4.4
            webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING);
        }else{
            webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
        }
        /*
        * 还有一种是加载https的URL时在5.0以上加载不了，
        * 5.0以下可以加载，这种情况可能是网页中存在非https得资源，在5.0以上是默认关闭，需要设置，
        *
        * */
        webSettings.setLoadWithOverviewMode(true);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
            webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    }

    public class WebChromeClient extends android.webkit.WebChromeClient{
        //加载内容改变时
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
            if(newProgress == 100){
                progressbar.setVisibility(GONE);
            }else{
                if(progressbar.getVisibility() == GONE){
                    progressbar.setVisibility(VISIBLE);
                }
                progressbar.setVisibility(VISIBLE);
            }
        }
    }
    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        LayoutParams lp = (LayoutParams) progressbar.getLayoutParams();
        lp.x = l;
        lp.y = t;
        progressbar.setLayoutParams(lp);
        super.onScrollChanged(l, t, oldl, oldt);
    }
}
